Linguagem Python - 2/2012 Grupo 2
Python é uma linguagem multiparadigma, ou seja, é uma linguagem de programação de alto nível, interpretada, imperativa, orientada a objetos e de tipagem dinâmica (não exigem declarações de tipos de dados, pois são capazes de escolher que tipo utilizar dinamicamente para cada variável, podendo alterá-lo durante a compilação ou a execução do programa) e forte (exigem que o tipo de dado de um valor seja do mesmo tipo da variável ao qual este valor será atribuído). Existem distribuições para Windows, Mac e Linux, sendo que todas são distribuídas livremente e podem ser encontradas no site oficial da linguagem (www.python.org). A versão mais recente do Python atualmente é a 3.3.0, porém existem alguns softwares de terceiros que não são compatíveis com Python 3, portanto para esses casos é aconselhável usar o Python 2 e sua versão mais recente é a 2.7.3. __TOC__ Grupo Ciro Tosta Miranda - 10/0096186 Gustavo Meneses - 10/0103766 Matheus Oliveira - 10/0115942 Rebeca Moura - 10/0039201 História e criação O desenvolvimento de Python ocorreu na mesma época em que várias outras linguagens de programação dinâmicas (e open-source), tais como Tcl, Perl e (muito depois) Ruby, também estavam em desenvolvimento ativo e aumentando popularidade. O desenvolvimento inicial de Python começou em instituto de pesquisa em Amsterdam chamado CWI, uma sigla holandesa para uma frase que se traduz em português como Centro para Matemática e Ciência da Computação. CWI era um local interessante; financiado pelo Departamento de Educação do governo holandês e outros fundos de pesquisa, conduzia pesquisa acadêmica em ciência da computação e matemática. Em qualquer época havia vários estudantes de doutorado andando pelo local e veteranos na profissão ainda devem lembrar do nome original, o Centro de Matemática. Sob esse nome, provavelmente o centro ganhou fama pela invenção de Algol 68. Guido van Rossuma (criador da linguagem) começou a trabalhar no CWI no final de 1982, recém saído da universidade, como um programador do grupo ABC liderado por Lambert Meertens e Steven Pemberton. Depois de 4 ou 5 anos, o projeto ABC foi encerrado devido à óbvia falta de sucesso e então ele foi para o grupo Amoeba liderado por Sape Mullender. Amoeba era um sistema distribuído baseado em microkernel desenvolvido conjuntamente pelo CWI e Vrije Universiteit de Amsterdam, sob liderança de Andrew Tanenbaum. Em 1991, Sape deixou o CWI para lecionar na Universidade de Twente e Rossuma terminou no recentemente formado grupo de multimídia do CWI liderado por Dick Bulterman. Python é um produto direto da experiência de Rossuma no CWI. A ABC deu a inspiração crucial para Python, Amoeba a motivação imediata e o grupo de multimídia fomentou seu crescimento. Entretanto, pelo que eu sei, nenhum fundo no CWI foi oficialmente reservado para seu desenvolvimento. Em vez disso, Python meramente se desenvolveu como uma ferramenta importante tanto para o grupo Amoeba quanto para o grupo multimídia. A motivação de Rossuma para a criação de Python foi a percepção da necessidade de uma linguagem de alto nível no projeto Amoeba. Ele percebeu que o desenvolvimento de utilitários para administração de sistema em C estava tomando muito tempo. E fazê-los no shell Bourne não funcionaria por diversas razões. O mais importante foi que, sendo um sistema distribuído de microkernel, as operações primitivas do Amoeba eram bem diferentes (e refinadas) que as operações primitivas disponíveis no shell Bourne. Portanto, havia necessidade de uma linguagem que "preencheria o vazio entre C e o shell". Por um tempo longo, esse foi o principal lema de Python. Nesse ponto, você poderia perguntar "por que não adaptar uma linguagem existente?" No ponto de vista de Rossuma, não havia linguagens adequadas à época. “Eu era familiar com Perl 3, mas essa estava ainda mais ligada ao Unix que o shell Bourne . Eu também não gostava da sintaxe de Perl -- meu gosto por sintaxes de linguagens de programação foram fortemente influenciadas por linguagens como Algol 60, Pascal, Algol 68 (todas eu havia aprendido anteriormente), e finalmente, ABC, na qual eu passei quatro anos da minha vida. Portanto, decidi projetar uma linguagem por mim mesmo a qual poderia pegar tudo que gostei de ABC enquanto, ao mesmo tempo, consertar todos seus problemas (como os percebia)”, declarou Rossuma. "O primeiro problema que decidi consertar foi o nome! Da forma que ocorreu, o time ABC teve alguns problemas ao escolher um nome para a linguagem. O nome original, B, teve que ser abandonado por causa de má confusão com outra linguagem chamada B, que era mais velha e melhor conhecida. De qualquer modo, a ideia era usar B como título de projeto apenas (a piada era que B era o nome da variável contendo o nome da linguagem -- daí o itálico). A equipe lançou uma competição pública para escolher o novo nome, mas nenhuma das submissões levou e, no fim, a segunda opção interna prevaleceu. O nome era para transmitir a ideia de uma linguagem que faria programação "tão simples quanto ABC", mas nunca me convenceu a tanto. "Portando, em vez de analisar demasiadamente o problema de nomenclatura, decidi subanalisá-lo. Escolhi a primeira coisa que me veio à cabeça, que foi Monty Python’s Flying Circus, um dos meus grupos de comédia favoritos. A referência era convenientemente irreverente para o que era essencialmente um "projeto skunkworks". A palavra "Python" também era cativante, um pouco irritante e, ao mesmo tempo, encaixava na tradição de nomear linguagens em homenagens a pessoas famosas, como Pascal, Ada e Eiffel. O grupo Monty Python pode não ser famoso pelos avanços em ciência ou tecnologia, mas certamente é um favorito dos geeks. Também se encaixou na tradição do grupo Amoeba no CWI de batizar programas com nomes de programas de TV. (...) '' ''"Com o problema do nome resolvido, eu comecei a trabalhar em Python no fim de dezembo de 1989 e tinha uma versão operacional nos primeiros meses de 1990. Eu não anotava, mas lembro vividademente que o primeiro trecho de código que escrevi para implementação de Python era um simples gerador de parser LL(1) que chamei de "pgen".(...). Em 20 de fevereiro de 1991, eu liberei Python para o mundo pela primeira no grupo de notícias alt.sources (em 21 partes codificadas com uuencode que deveriam ser reuniadas e decodificadas com uudecode para compor um arquivo tar comprimido). Essa versão foi numerada como 0.9.0 e liberada sob uma licença que era quase uma cópia exata da licença MIT usada pelo projeto X11 na época, substituindo "Stichting Mathematisch Centrum", organização pai do CWI, como entidade legal responsável. Então, como quase tudo que eu escrevi, Python era um open source, antes que o termo fosse inventado por Eric Raymond e Bruce Perens ao final de 1997. "Imediatamente houve muito retorno e com esse encorajamento eu mantive um fluxo constante de lançamentos pelos próximos anos. (...)Eu escrevi um FAQ, que era regularmento publicado em algum grupo de notícias, como era costume para FAQs naqueles dias antes da web, iniciei uma lista de discussão por e-mail e em março de 1993 o grupo comp.lang.python foi criado com meu encorajamento, mas sem meu envolvimento direto. O grupo e a lista de e-mails foram unificados através de um gateway bidirecional que ainda existe, embora atualmente implementado como uma funcionalidade do mailman - o gerenciador de listas dominante de código aberto, escrito em Python. (...) "O primeiro workshop de Python ocorreu enquanto eu estava lá em novembro de 1994, com o programador do NIST Ken Manheimer provendo assistência e encorajamento importantes. De aproximadamente 20 participantes, por volta da metade ainda são participantes ativos na comunidade Python e uns poucos se tornaram grandes líderes de projetos de código aberto (Jim Fulton do Zope e Barry Warsaw do GNU mailman). Com o suport do NIST eu também dei uma palestra para aproximadamente 400 pessoas na conferência Usenix Little Languages em Santa Fe, organizada por Tom Christiansen, um adovgado de Perl de mente aberta que me apresentou ao criador de Perl, Larry Wall, e ao autor de Tcl/Tk, John Ousterhout." Característiscas gerais *Case sensitive: Diferenciação entre letras maiusculas e minusculas; *Checagem de tipo dinâmica e forte: Significa que as variáveis assumem o tipo do valor atribuido e precisam ser convertidas para ser tratadas como um tipo diferente; *Linguagem pura: 100% orientada a objetos, tudo é um objeto; *Código auto-descritivo: Simples e de fácil leitura; *Programação em alto-nível: Não permite manipulação de memória; *Não suporta sobrecarga de funções; *Visa facilitar o desenvolvimento, foco em produtividade. Premissas *Qualidade do software :: Python segue uma filosofia minimalista que visa a legibilidade e a capacidade de escrita o que torna a linguagem mais fácil de aprender, entender e lembrar. Além disso, o Python não toma decisões arbitrárias; quandos as interações são ambíguas, uma intervenção explícita é preferida, em vez de "mágica". Na maneira Python de pensar, explícito é melhor que implícito e simples é melhor do que complexo. *Produtividade do desenvolvedor :: Python se distingue como uma ferramenta que permite aos programadores fazer mais com menos esforço. Ela é deliberadamente otimizada para velocidade de desenvolvimento - sua tipagem dinâmica, ausência de etapas de compilação e seu conjunto de ferramentas incorporado, permitem que os programadores desenvolvam programas em uma fração do tempo de desenvolvimento necessário para algumas outras ferramentas. *Portabilidade do programa :: Portar um código Python entre o Unix e o Windows, por exemplo, normalmente é apenas uma questão de copiar o código entre as máquinas. Além disso, o Python oferece várias opções para desenvolvimento de interfaces gráficas de usuário portáveis. *Bibliotecas de suporte :: O Python vem com um grande conjunto de bibliotecas padrão, que suportam várias tarefas de programação no nível de aplicativo, como text pattern matching e scripts de rede. *Integração de componentes :: Atualmente, o código Python pode chamar bibliotecas de C/C++, pode ser chamado a partir de programas em C/C++, pode ser integrado com componenetes Java, pode se comunicar pela rede. Usuário característico Python pode ser usado para fazer de tudo, desde aplicativos simples, até aplicativos web. Sendo comumente usado para o ultimo. Alguns exemplo de grande empresas que usam Python para desenvolvimento são: No mundo: *Dropbox *Google (Google Doc, Picasa, Orkut Help) *ObjectDomain (extensão de ferramenta UML) *InfoSeek (linguagem scripting) *Yahoo! (CGI no Yahoo! Mail) *Digital Creations (Zope) *RedHat (Ferramentas de instalação) *NASA, MCI Worldcom, IBM e Hiway No Brasil: *Embratel: monitoramento das interfaces de backbone e clientes de internet, também existem scripts de uso interno. *CPqD: monitoramento de centrais telefônicas. *GPr Sistemas: Desenvolvimento de aplicações sob encomenda, sistemas como monitoramento de transporte terrestre via satélite são as soluções já feitas. *Outras que utilizam o Python para sistemas Web, como Varig, Serpro,Interlegis, ... Os sistemas web de gestão de conteúdo usando o trio Python/Zope/Plone vem crescendo a cada dia, principalmente em grandes empresas e em órgãos do governo. Dominio de aplicação Como linguagem de propósito geral, as funções do Python são praticamente ilimitadas. Entretando, as funções mais comuns do Python parecem recair em algumas categorias mais amplas. Algumas exemplos são: Programação de sistemas As interfaces incorporadas do Python para serviços de sistema operacional o tornam ideal para escrever ferramentas e utilitários de administração de sistemas portáveis e fáceis de manter (às vezes chamadas de ferramentas de shell). Os programas em Python podem pesquisar arquivos e árvores de diretório, chamar outros programas, realizar procesamento paralelo com processos e segmentos etc. GUIs A simplicidade e o rápido retorno do Python também o tornam bom para programação de GUI (interface gráfica com o usuário). O Python vem com uma interface orientada a obejtos padrão para a API de GUI Tk, chamada Tkinter, que permitem aos programas em Python implementarem GUIs portáveis com aparência e comportamento nativos. Scripts de Internet Python possui módulos para a internet padrão que permitem aos programas executar uma grande variedade de tarefas em rede, tanto no modo cliente como servidor. Os scritps podem comunicar-se por meio de sockets; extrair informações de formulários enviados para um script CGI no lado servidor; transferir arquivos via FTP; processar URLs; analisar o código HTML e XML das paginas buscadas da Web. Além disso, existem um amplo conjunto de ferramentas de outros fornecedores na Web para fazer programação para internet em Python. Integração de componentes Python possui facilidade para integrar componentes em sistemas C e C++. Ferramentas de código SWIG podem automatizar grande parte do trabalho necessário para vincular componentes compilados no Python, para uso em scripts. Programação de banco de dados Existe um módulo denominado Pickle padrão do Python que fornece um sistema de persistência de objetos simples. Dessa forma. Permite que os programas salvem e restaurem facilmente objetos Python inteiros em arquivos e objetos do tipo arquivo. Para demanda de banco de dados tradicionais, existem interfaces Python para Sysbase, Oracle, ODBC, MySql e outros. Composição rápida de protótipos Para os programas em Python, os componentes escritos na linguagem e em C parecem semelhantes. Por isso, é possível fazer o protótipo de sistemas inicialmente em Python e, então, mover componentes para uma linguagem compilada, como C e C++, para distribuição. Critérios de avaliação Legibilidade O Python é uma linguagem bastante legível, o que não é de espantar, dado que descende do ABC, uma linguagem desenhada expressamente com fins didáticos. O Python usa o nível de indentação no início de cada linha para definir blocos de código, dispensando a utilização de chavetas ou de outros indicadores de início e fim de bloco. A obrigatoriedade da indentação estabelece um patamar mínimo de legibilidade que noutras linguagens tem de ser implementado ou através de uma convenção implementada com disciplina férrea ou através da utilização de editores especializados. Houve ainda desde a sua concepção a preocupação de não sobrecarregar a sintaxe do Python com caracteres não alfabéticos, e os poucos que são usados são relativamente familiares ao olhar: os parenteses normais (), os parenteses rectos [], as chavetas {}, as aspas ", o apóstrofo ', os dois pontos, a vírgula e o ponto final. Os caracteres @&$! que são a assinatura visual de algumas outras linguagens de programação não têm significado especial em Python. Isto significa que o aspecto visual de uma linha de código Python é menos intimidatório para o leigo ou para o programador principiante. A sua legibilidade torna um programa escrito em Python mais num livro aberto do que num código para ser decifrado, facilitando a sua manutenção ou modificação. Outra funcionalidade que reflete a preocupação didática do Python é a existência de uma linha de comando que permite ao utilizador testar pedaços de código e até desenvolver interativamente pequenos programas. A linha de comando permite inspecionar os diferentes objetos manipulados pelos nossos programas, e torna a aprendizagem da linguagem muito mais acessível, permitindo testar o nosso código de forma interativa. Capacidade de escrita Simplicidade e ortogonalidade Phyton tem por objetivo ser minimalista e possui menos instruções básicas e palavras reservadas, o que contribui para o seu fácil aprendizado. Phyton procura implementar apenas um modo correto de se executar uma determinada operação, isso fortalece a simplicidade e consequentemente a legibilidade da linguagem. É uma linguagem de alto nível, com alta capacidade de abstração o que torna essa simplicidade poderosa e expressiva. Python possui um conjunto reduzido de estruturas de controle, de forma a reduzir a complexidade da linguagem. Além disso a forma de expressar um loop for para percorer elementos de uma lista ou dicionário ou qualquer objeto que implemente alguns métodos especiais é simples e poderosa. E possui o recurso de compreensão de listas. Exemplos: Python – compreensão de listas: lista = 2, 3 ,4 ,5 ,6 ,7 ,8 ,9, 10 lista = for x in lista if x % 2 = 0 4 ,6, 8 , 10 Suporte para abstração O suporte para abstração em uma linguagem está relacionado a capacidade de definição de novos tipos de dados abstratos, denominada abstração de dados. Além disso, também está relacionada com a possibilidade de se abstrair um processo utilizando funções e procedimentos no paradigma funcional e imperativo. O paradigma orientado a objetos funde esses dois conceitos ao permitir a definição de classes, com suas propriedades e métodos. E isso possui um impacto importante na capacidade de escrita e na confiabilidade, facilitando o reuso de código e a legibilidade. Python trata as funções como tipos de dados de primeira ordem, o que a permite passar uma função como parâmetro de outras funções, armazenar funções como atributos ou elementos de uma estrutura de dados ou lista e também retorná-las como resultado de uma expressão, o que permite a criação de abstrações mais poderosas. Um exemplo dessa capacidade é o uso da função interna map que mapeia os elementos de um conjunto aos elementos de um novo conjunto utilizando uma função que é passada como parâmetro e que será aplicada a cada elemento do conjunto inicial para gerar o novo conjunto. Exemplos: map(math.sqrt, 1,2,3,4) O resultado será uma nova lista contendo a raiz quadrada dos elementos da lista passada como parâmentro. Expressividade A linguagem foi projetada com a filosofia de enfatizar a importância do esforço do programador sobre o esforço computacional. Prioriza a legibilidade do código sobre a velocidade ou expressividade. Sintaxe Combina uma sintaxe concisa e clara com os recursos poderosos de sua biblioteca padrão e por módulos e frameworks desenvolvidos por terceiros. Confiabilidade Verificação de Tipos Tradicionalmente o sistema de verificação de tipos de uma linguagem de programação é classificado em dois grupos principais: estaticamente (fortemente) tipadas ou dinâmicamente (fracamente) tipadas. A capacidade de verificação de tipos de uma linguagem afeta diretamente a sua confiabilidade. Porém Python não se enquadram nesse modelo, pois é uma linguagem dinâmicamente tipada e ao mesmo tempo fortemente tipada. Python é dinamicamente tipada e também possui a inferência dos tipos. Porém, o sistema de verficação de tipos não realiza a conversão implícita de um tipo de dados para outro, leventando uma exceção quando tipos inconsistentes são utilizados. Python realiza uma nova vinculação de nome e espaço a cada atribuição de valor a uma variável, inferindo o tipo de dados do valor recebido. Além disso ela não possui definição de tipos nos parâmetros de funções ou métodos, deixando a cargo no programador o tratamento dos tipos recebidos e retornados. Exemplos: Python 10 + “16” TypeError: unsupported operand type(s) for +: 'int' and 'str' Manipulação de exceções Durante o desenvolvimento de um programa, diferentes tipos de erros precisam ser previstos e tratados para que se alcance um grau de confiabiliade adequado a cada necessidade, evitanto que o programa seja finalizado de forma inesperada. Porém, se a linguagem utilizada não suportar nativamente o recurso de manipulação de exceções, quanto mais verificações forem necessárias, mais complexo o código vai ficar, e isso terá um impacto direto na legibilidade e no custo de implementação e manutenção. Python tem o suporte nativo ao tratamento de exceções, incluindo a definição de novos tipos de execeção. As exceções definidas pelo usuário utilizam o conceito de herança da orientação a objetos. Exception é a classe base na qual todas as outras exceções são derivadas. E como existe a unificação entre classes e tipos, e subclasses são subtipos, ao tratar uma exceção de um determinada classe todas as subclasses dessa exceção também serão tratadas. Aliasing Objetos tem individualidade, e podem estar vinculados a múltiplos nomes (em diferentes escopos). Essa facilidade é chamada aliasing em outras linguagens. À primeira vista não é muito apreciada, e pode ser seguramente ignorada ao lidar com tipos imutáveis (números, strings, tuplas). Entretanto,aliasing tem um efeito intencional sobre a semântica de código em Python envolvendo objetos mutáveis como listas, dicionários, e a maioria das entidades externas a um programa como arquivos, janelas, etc. Alias funcionam de certa forma como ponteiros, em benefício do programador. Por exemplo, passagem de objetos como parâmetro é barato, pois só o ponteiro é passado na implementação. E se uma função modifica um objeto passado como argumento, o chamador vai ver a mudança - o que elimina a necessidade de um duplo mecanismo de passagem de parâmetros como em Pascal. Legibilidade e capacidade de escrita Python possui um grau de flexibilidade muito alto e isso tem impacto na sua confiabilidade, mas que é contrabalanceado com um modelo de objetos elegante, tratamento de exceções nativo e orientado a objetos e alta capacidade de abstração e recursos da programação funcional. A sua capacidade de escrita é alta para domínio de negócios e domínios mistos. Custo Custo de treinamento e para escrever programas O custo de treinamento e o custo para escrever programas em Python é baixo, uma vez que a que capacidade de escrita e a legibilidade é alta. O tempo do entendimento de códigos exemplos na aprendizagem e o para a manuteabilidade é baixo, otimizando o tempo de desenvolvimento. Custo para compilar programas O custo de compilação, no caso de Python, interpretar, é alto. As instruções do código-fonte é traduzido em um formato intermediário conhecido como byte-code e depois esse byte-code é quem é interpretado. Custo para executar programas Sua velocidade de execução nem sempre é tão rápida quanto linguagens compiladas, como C e C++. As implementações padrão do Python compilam instruções do código-fonte em formato intermediário (código de byte) e depois o interpretam. Outros Portabilidade A implementação padrão do Python é escrita em ANSI C portável, compila e executa em praticamente todas as principais plataformas em uso atualmente. Por exemplo, os programa em Python são executados em tudo, de PDAs até supercomputadores. Além do interpretador de linguagem em si, o conjunto de módulos de bibliotecas padrão que acompanha o Python também é implementado para ser portável o máximo possível entre plataformas. Além disso, os programas em Python são compilados automaticamente em código de bute portável, o qual é executado igualmente em qualquer plataforma com uma versão de Python compatível instalada. Qualidade da Definição Por Python ser uma linguagem open source, ter o foco no programador e o no tempo de desenvolvimento, ele possui uma comunidade muito grande espalhada por todo o mundo. A documentação é ampla e bem definida, a original é encontrada no site http://docs.python.org/3/ e algumas bibliografias traduzidas para o português, pela comunidade do Python Brasil, no site: http://www.python.org.br/wiki/DocumentacaoPython. Construtores Estrutura da linguagem *Programas são compostos de módulos; *Módulos possuem instruções; *As instruções possuem expressões; *As expressões criam e processam objetos. Tipos de dados *Tipos numéricos nativos :: Inteiros, ponto flutuante e complexo. *Booleanos *Lista :: A lista é uma sequencia: um conjunto linear (como um vetor em outras linguagens) de valores indexados por um número inteiro. Os índices são iniciados com zero e atribuidos sequencialmente a partir deste. :: A lista pode conter quaisquer valores, incluindo valores de tipos mistos, e até outras listas. Para criar uma lista , usamos colchetes e virgulas para enumerar valores >>> a = "B", "C", 0, 1, 2 >>> print a0 A >>> print a5 2 :: Alguns métodos relacionados à manipulação de listas: :: *append ( elemento ): adiciona elemento ao fim da lista. :: *count ( elemento ) : retorna um inteiro contendo a quantidade de vezes que elemento aparece na lista. :: *reverse () : inverte a ordem dos elementos da lista. :: *remove ( elemento ) : remove da lista o primeiro elemento encontrado. *Tuplas :: A tupla é uma sequência, como a lista: armazena um conjunto de elementos acessíveis por um índice inteiro. A tupla é imutavel; uma vez criada, não pode ser modificada. :: Para criar uma tupla usa-se parenteses, e vírgulas para separar seus elementos >> t = (1,3,5,7) >>print t2 #5 *Strings :: String são grupos de caracteres imútaveis. :: Aspas simples para elementos da string, aspas duplas para strings no geral e aspas triplas para strings com quebras de linhas. >> a = "Anticonstitucionalissimamente" >> print a0 #A >> print a13 #i >> print a:4 #Anti >> print a-5:-1 #Ment *Dicionários :: Dicionários são seqüências que podem utilizar índices de tipos variados, bastando que estes índices sejam imutáveis (números, tuplas e strings, por exemplo). Dicionários são conhecidos em outras linguagens como arrays associativos ou hashes. >>> autor = {"nome" : "Ciro", "idade": 20} >>> print autor"nome" Ciro >>> print autor"idade" 20 *Classes e Instâncias :: Classes são estruturas especiais que servem para apoiar programação orientada a objetos; determinam um tipo customizado com dados e operações particulares. Instâncias são as expressões concretas destas classes. :: Um atributo de classe é um atributo definido na classe, todo atributo de classe é refletido nas instâncias. :: Exemplo: class Veiculo (object): marca = None ano = None gol.Veiculo() gol.marca = "Volkswagen" gol.ano = 2008 :: Um atributo de instância é um atributo definido na instância da classe (objeto), atributos de instâncias são únicos e pertencem apenas à uma instância específica. :: No exemplo abaixo marca e ano são atributos de instância, se for criado outro objeto da classe Veiculo, esses atributos não existirão na nova instância: class Veiculo (object): pass fusca.Veiculo() fusca.marca = "Volkswagen" fusca.ano = 2008 :: Por ser uma linguagem orientada a objetos, Python tem suporte à herança e polimorfismo (mesmo não aceitando sobrecarga de funções, aceita polimorfismo). A herença é simbolizada por parênteses e toda classe precisa herdar de outra classe ou da classe object. Python, assim como C++, tem suporte a herança multipla. :: Python não possui uma construção sintática literal para restringir acesso aos atributos de uma instância e torná-la uma variável privada, mas existem duas formas de indicar que um atributo não deve ser acessado externamente: :: > A primeira forma é implementada por meio de uma convenção, não havendo suporte específico na linguagem em si: convenciona-se que atributos e métodos cujo nome é iniciado por um sublinhado (como _metodo_a) não devem ser acessados externamente em situações 'normais'. :: > A segunda forma estende esta convenção com suporte no próprio interpretador: métodos e atributos cujo nome é iniciado por dois sublinhados (como __metodo_a) são considerados de fato privados, e têm seus nomes alterados de maneira transparente pelo interpretador para assegurar esta proteção. *Módulos :: Módulo é o agrupamento de comandos para o operador. Numa definição mais informal, módulo é um arquivo de código-fonte Python. Módulos são arquivos definidos com as extensões .py , .pyc , .pyo , .pyw , dentre outras menos utilizadas. Nossos módulos terão sempre a extensão .py, pois se trata da extensão para código fonte de execução em terminal. Em Python é possível definir mais de uma classe por arquivo (módulo). Tipos de funções Sintaxe geral def nome_funcao(arg_1, arg_2, ..., arg_n): # # bloco de código contendo corpo da função # return valor_de_retorno # retornar é opcional Função global def imprime_cardapio (pratos): print "Cardapio para hoje\n" for p in pratos: imprime_prato(p) print "\nTotal de pratos: %d" % len(pratos) Escopo Tanto as variáveis definidas no corpo de uma função, como a variável i no exemplo abaixo, quanto os argumentos da função são acessíveis apenas no escopo local; em outras palavras, apenas no bloco de código da própria função. v = 0 w = 1 def verifica(a, b): i = 0 # Neste bloco de código, v, w, a, b e i são acessíveis. def cancela(x, y): i = 0 # Neste bloco de código, v, w, x, y e i são acessíveis, # mas note que *este* i não tem nenhuma relação com # o i da função verifica() acima. Variáveis definidas no corpo principal (ou seja, definidas em um bloco não-indentado, como as variáveis v e w acima) de um módulo podem ser lidas em qualquer função contida naquele arquivo; no entanto, não podem ser alteradas. Caso se deseje definir ou atribuir um novo valor a uma variável global, existe uma instrução especial, global. Esta instrução indica que a variável cujo nome for especificado é para ser definida no escopo global, e não local. v = 0 def processa(t): global v v = 1 No código acima, a função altera o valor da variável global v. Há duas funções úteis para estudar os escopos que se aplicam em um determinado contexto: locals(), que retorna um dicionário descrevendo o escopo local ao contexto atual; os itens do dicionário são compostos dos nomes das variáveis definidas neste escopo e os valores aos quais correspondem. global(), que retorna um dicionário semelhante ao da função locals(), mas que descreve o escopo global. Métodos class Veiculo(object): marca = None ano = None def __init__(self, marca = None, ano = None) : self.marca = marca self.ano = ano def andar(self): print("O Carro esta andando!") @staticmethod def getDefautlInstance(): return Veiculo("",0) Métodos estáticos : O conceito de método estático muitas vezes é confundido com o conceito de função em linguagens como Java e C#, que não suportam “métodos globais” (funções). O uso de métodos estáticos em Python é incomum, mas existe, para definir um método estático utilizamos a anotação staticmethod. Palavras reservadas Operadores Operadores aritméticos >>> print a + 3 # adição 10 >>> print a - 2 # subtração 5 >>> print a / 2 # divisão inteira: argumentos inteiros 3 # e resultado inteiro >>> print a / 2.5 # divisão em ponto flutuante: pelo 2.8 # menos um argumento deve ser float >>> print a % 4 # resto da divisão inteira 3 >>> print a * 2 # multiplicação 14 >>> print a ** 2 # exponenciação 49 os operadores de adição (+) e multiplicação (*), em strings: >>> a = "exato" >>> print a * 2 exatoexato >>> print "quase " + a quase exato , listas: >>> a = 0 >>> b = 2, 3 >>> print b * 3 2, 3, 1, 2, 3, 1, 2, 3 >>> print a + b 0, 1, 2, 3 e tuplas: >>> a = (1, 2) >>> print a + (2, 1) (1, 2, 2, 1) Operadores condicionais >>> print 2 4 # igualdade False >>> print 2 != 4 # diferente de True >>> print 1 < 2 # menor que True >>> print 3 > 5 # maior que False >>> print 3 >= 4 # maior ou igual que False Comparações podem ser realizadas também com outros tipos de variáveis; para strings, listas ou dicionários, as comparações `maior que' e `menor que' se referem ao número e ao valor dos elementos, mas por não serem terrivelmente claras não são muito freqüentemente usadas7. >>> 2,2,3 < 2,3,2 True >>> "abacate" < "pera" True Estruturas de controle A instrução condicional básica de Python é o if. A sintaxe é descrita a seguir (lembrando que a indentação é que delimita o bloco): if condição: # bloco de código elif condição: # outro bloco else: # bloco final Há apenas dois tipos de laços em Python: for e while. O primeiro tipo, mais freqüentemente utilizado, percorre uma seqüência em ordem, a cada ciclo substituindo a variável especificada por um dos elementos. Por exemplo: >>> jan_ken_pon = "papel", "cenoura" >>> for item in jan_ken_pon: ... print item O segundo tipo de laço, while, é utilizado quando necessitamos fazer um teste a cada iteração do laço. while condição: # bloco de código else: # bloco executado na ausência de um break Exceções A exceção normalmente imprime um traceback e interrompe a execução do programa. Uma ação comum é testar e controlar a exceção; para este fim, usamos uma cláusula try/except: >>> a = 2, 3 >>> try: ... print a5 ... except IndexError: ... print "O vetor nao possui tantas posições!" O vetor nao possui tantas posições! A instrução try captura exceções que ocorrerem no seu bloco de código; a linha except determina quais tipos de exceção serão capturados. A sintaxe da cláusula except segue os formatos: except tipo_da_excecao variavel_da_excecao: # bloco de código ou except (tipo_excecao_1, tipo_excecao_2, ...) variavel_da_excecao: # bloco de código Comparação com outras linguagens *Tem uma sintaxe mais limpa e um design mais simples do que Perl, o que o torna mais legível e fácil de manter, e ajuda a reduzir erros de programa *É mais simples de usar do que Java. O Python é uma linguagem de script, mas Java herda grande parte da complexidade das linguagens de sistema, como C++ *É mais simples e fácil de usar do que a C++, e quase não compete com esta; como uma linguagem de script, muitas vezes o Python tem funções diferentes. *É mais poderoso e mais independente de plataforma do que o Visual Basic. Sua natureza de código-fonte aberto também significa que ele não é controlado por uma única empresa. *Tem a característica dinâmica de linguagens como SmallTalk e Lisp, mas também tem uma sintaxe tradicional simples, acessível para desenvolvedores e usuários finais. Bibliografia Livros *SEBESTA, Robert W. , Concepts of Programming Languages 7 ed. *LUST, Mark; ASCHER, David. Aprendendo Python. 2 ed. Sites *http://www.async.com.br/projects/python/pnp/python.html *http://python-blog.blogspot.com.br/2007_04_01_archive.html *http://www.python.org.br/wiki/AprendaMais *http://www.python.org/download *http://python-history.blogspot.com.br/2009/01/personal-history-part-1-cwi.html